1. Field of the Invention
This invention relates to computer systems and, more particularly, to synchronization of persistent data stores.
2. Description of the Related Art
Computer systems are commonly configured to process large quantities of data on behalf of numerous applications and users. For example, some computer systems may be configured to track business activities at a whole-enterprise level, including manufacturing and production data, procurement data, sales data, human resources data, as well as many other types of data. Further, some such computer systems may execute applications configured to perform sophisticated functions on enterprise data, such as real-time inventory management, cash flow monitoring, web-based ordering, and other types of functions.
In some computer system software architectures, data may be stored (or “persisted”) in large data repositories or “data stores.” For example, one or more databases may be used as data stores for enterprise data. In some such architectures, data stores may be separate software systems from applications that generate, modify, or consume enterprise data, which may allow for greater flexibility in developing and maintaining applications.
Depending on the system implementation, applications may execute on distinct computer systems that may be remote from the computer systems implementing data stores. Additionally, a given application may process a substantial amount of data while executing a given operation. Consequently, in some embodiments an application may be configured to retrieve data from a data store and process it locally before committing any changes back to the data store.
If multiple applications are configured to perform local processing of data, it is possible that one application may modify data within a data store that another application is processing. In some instances, such data transience may create inconsistencies in application operation, for example if a given application operation is predicated on consuming the most recent value of a given data item. Consequently, in some embodiments that support local processing of application data, applications may include synchronization resources to detect and resolve conflicts that may occur when multiple applications access and modify the same data.
However, coding synchronization functionality into each application that requires it presents several shortcomings. For example, numerous possible methods for implementing data synchronization may exist, each method being more optimal for some data usage scenarios than others. Therefore, an application developer is required to choose and develop each foreseeable synchronization method for each application, thus increasing development and validation effort for each given application. Further, implementing synchronization functionality within each application may increase development redundancy, for example if the same synchronization functionality is employed by several applications. Finally, to the extent that the correctness of synchronization functionality at a system level requires each application to exhibit the same synchronization behavior (i.e., that each application implementing a given synchronization protocol does so consistently, so that protocol assumptions are uniform), implementing synchronization functionality within each application increases overall system validation effort.